package com.zykj.first;

import com.zykj.first.behavior.FlyBehavior;
import com.zykj.first.behavior.QuackBehavior;

/**
 * Duck 如果和其之类的关系仅仅是继承关系， 那么在 Duck 的行为 如  fly,  quack  后期还不
 * 知道会加入其它什么行为特性， Duck 行为有改动 会直接导致所有之类的行为改动（迁一发而动全身），
 * 但是如果采用继承   所有之类根据自身不同的特性覆盖父类的行为 会导致代码复用不理想
 *
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Title: Duck
 * @Project: ${MODEL_NAME}
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 49
 * @since 2018/12/25-22:49
 */
public abstract class Duck {

    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;
    // 执行 叫
    public void performQuack() {
        quackBehavior.quack();
    }
    public void performFly() {
        flyBehavior.fly();
    }

    public abstract void dispaly();


    public void swim() {
        System.out.println("所有鸭子都有的特征..");
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}
